<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>4.天气案例_深度监视</title>
		<!-- 引入开发版本的Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
			深度监视：
					(1).Vue中的watch默认不监测对象内部值的改变（对象的地址值）。
					(2).配置deep:true可以监测对象内部值改变（对象中的属性）。
			备注：
					(1).Vue自身可以监测对象内部值的改变，但Vue提供的watch默认不可以！
					(2).使用watch时根据数据的具体结构，决定是否采用深度监视。

		 -->
		<!-- 准备好一个容器-->
		<div id="root">
			<h2>今天天气很{{text}}</h2>
			<button @click="changeWeather">切换天气</button>
			<hr>
			<h2>人的名字：{{person.name}}</h2>
			<h2>人的年龄：{{person.age}}</h2>
			<button @click="person.age++">年龄+1</button>
			<button @click="person.name += '!'">名字+!</button>
			<button @click="person = {name:'冯提莫',age:34}">换人</button>
		</div>
	</body>

	<script type="text/javascript">
		Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
		
		const vm = new Vue({
			el:'#root',
			data:{
				isHot:true, //标识天气是否炎热
				person:{
					name:'刘远',
					age:15,
				}
			},
			methods: {
				changeWeather(){
					this.isHot = !this.isHot
				},
				/* demo(){
					this.person.name += '!'
				} */
			},
			computed: {
				text(){
					return this.isHot ? '炎热' : '凉爽'
				}
			},
			watch:{
				isHot:{
					// immediate:true, //立即监听
					handler(newValue,oldValue){
						console.log('isHot的值发生了变化',newValue,oldValue)
						// if(newValue) console.log('注意防暑！')
						// else console.log('妈妈告诉你穿上秋裤吧！')
					}
				},
				
				//监视多级结构中某个属性的变化
				/* 'person.age':{
					handler(newValue,oldValue){
						console.log('人的年龄变化了',newValue,oldValue)
					}
				},
				'person.name':{
					handler(newValue,oldValue){
						console.log('人的名字变化了',newValue,oldValue)
					}
				} */

				//监视对象类型的改变（无法检测到对象里的属性变化，监测的是整个对象的变化——地址值）
				/* person:{
					handler(value){
						console.log('整个人都变了',value)
					}
				} */

				//监视对象类型中所有属性的改变
				person:{
					deep:true, //开启了深度监视
					handler(value){
						console.log(`人的某个属性发生变化了，名：${value.name}，年龄：${value.age}`)
					}
				}
			}
		})

	</script>
</html>